import UserProxy from "../../net/UserProxy"
import WsUtils, { WsCode } from "../../net/WsUtils"
import EventUtils, { EventType } from "../../public/EventUtils"
import UiMgr from "../../public/UiMgr"

/**
 * 加载界面
 */
const { ccclass, property } = cc._decorator

@ccclass
export default class LoadUI extends cc.Component {
    /** 进度条 */
    @property(cc.ProgressBar)
    prog: cc.ProgressBar = null

    /** 进度条文字 */
    @property(cc.Label)
    progLabel: cc.Label = null

    /** 开始按钮 */
    @property(cc.Button)
    btnStart: cc.Button = null

    /** 继续按钮 */
    @property(cc.Button)
    btnCont: cc.Button = null

    /** 设置按钮 */
    @property(cc.Button)
    btnSet: cc.Button = null

    start() {
        // 初始化网络
        this._initNet()

        // ------------------------------注册事件监听------------------------------
        // 初始化网络
        EventUtils.on(EventType.INIT_NET, this._onInitNet, this)
        // 请求注册回调
        EventUtils.on(WsCode.USER_REGISTER_RESP, this._respRegister, this)
        // 请求登录回调
        EventUtils.on(WsCode.USER_LOGIN_RESP, this._respLogin, this)
    }

    onDestroy() {
        EventUtils.off(EventType.INIT_NET, this._onInitNet)
        EventUtils.off(WsCode.USER_REGISTER_RESP, this._respRegister)
    }

    /** 初始化网络 */
    private _initNet() {
        // 初始化websocket实例
        WsUtils.initWs()
        // 更新进度条
        this.progLabel.string = '正在连接服务器...'
    }

    /** 初始化网络回调 */
    private _onInitNet() {
        if (UserProxy.instance.userId > 0) {
            // 请求登录
            UserProxy.instance.reqLogin()
            // 更新进度条
            this.progLabel.string = '正在登录...'
        }
        else {
            // 请求注册
            UserProxy.instance.reqRegister()
        }
    }

    /** 请求注册回调 */
    private _respRegister(data) {
        UserProxy.instance.respRegister(data)

        // 请求登录
        UserProxy.instance.reqLogin()
    }

    /** 请求登录回调 */
    private _respLogin(data) {
        UserProxy.instance.respLogin(data)

        // 隐藏进度条
        this.prog.node.active = false
        // 显示按钮
        this.btnSet.node.active = true
        this.btnStart.node.active = true
        this.btnCont.node.active = true
    }

    // ------------------------------按钮回调------------------------------
    /** 开始按钮回调 */
    async onBtnStart() {
        // 创建loadUI
        await UiMgr.instance.addUI('create', 'SelectRoleUI')
    }

    /** 继续按钮回调 */
    onBtnCont() {
        cc.log('TODO 继续按钮回调')
    }

    /** 设置按钮回调 */
    onBtnSet() {
        cc.log('TODO 设置按钮回调')
    }
}
